/**
 * 冒泡排序: 原理, 就是两遍循环, 直到相对位置固定. 
 *          时间复杂度为O(n**2)
 *          空间复杂度为O(1)
 */

 (()=>{
    let array = [1, 89, 0, 29, 11, 111, 798, 90]

    function S(A, B) {
        let temp;
        temp = A
        A = B
        B = temp
    }
    // console.log(S(2, 3));

    // 冒泡排序, 时间复杂度: O(n**2)
    //          空间复杂度: O(1), 原地算法

    function bubbleSort(arr) {
        for(let i = 0; i< arr.length -1; i++) {
            for(let j = 0; j< arr.length -i -1; j ++){
                if(arr[j] > arr[j +1]){
                    // S(arr[j], arr[j+1])
                    let temp;
                    temp = arr[j]
                    arr[j] = arr[j +1]
                    arr[j +1 ] = temp
                }
            }
        }
        return arr;
    }
    bubbleSort(array)
 })()

 function bubbleSort1(arr) {
    for(let i = 0; i< arr.length -1; i++) {
        for(let j =0; j<arr.length -i -1; j++){
            if(arr[j] > arr[j +1]){
                let temp;
                temp = arr[j]
                arr[j] = arr[j +1]
                arr[i +j ] = temp
            }
        }
            
    }
    return arr;
}

let arrr = [2, 3, 89, 90, 8, 10, 11]
const ressss = bubbleSort1(arrr)
console.log(ressss);